<?php

namespace App\Http\Controllers\RBAC;

use App\Http\Controllers\admin\AdminPlatformController;
use App\Http\Model\Per;
use App\Http\Model\Permission_group;
use App\Http\Model\Role;
use App\Http\Model\RolePermission;
use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Input;
use DB;

/***
 * Class RoleController RBAC角色管理控制器
 * @package App\Http\Controllers\RBAC
 */
class RoleController extends AdminPlatformController
{
    /** 属性声明 */

    /** 方法声明 */
    /** 添加角色 */
    public function role_add(){
        if(!$input = Input::except('_token')){
            /** 获取所有权限分组信息 */
            $per_group_list = Permission_group::all();
            /** 为每个分组封装权限数据 */
            foreach($per_group_list as $key => $group){
                $per_list = Per::where('cat_id',$group->pid)->get();
                $per_group_list[$key]->per_list = $per_list;
            }
            /** 加载视图 */
            return view('admin.rbac.role.roleAdd',compact('per_group_list'));
        }
        /** 处理提交数据 */
        $data = array(
            'role_name' => $_POST['role_name'],
            'sort_order' => $_POST['sort_order']
            );
        $role = DB::table('role')->insertGetId($data);
        /** 添加中间表数据 */
        /**  */
        $row = array(
            'rid'=>$role
            );
        foreach($_POST['per_data'] as $v){
            $row['pid'] = $v;
            DB::table('role_permission')->insert($row);
        }
        return redirect('manager/rbac/role/role_list');

    }

    /** 删除角色 */
    public function role_del($rid){
        /**
         * 1.删除角色 对应删除该角色下所有管理员
         */

        /**
         * 2.删除角色 权限 中间表数据
         */
        RolePermission::where('rid',$rid) -> delete();

        if(Role::where('role_id',$rid)->delete()){
            /** 删除成功返回角色列表 */
            return redirect('manager/rbac/role/role_list');
        }
        return back();
    }

    /** 编辑角色 */
    public function role_edit($rid){
        if(!$input = Input::except('_token')){
            //获取该角色信息
            $role_info = Role::find($rid);

            /** 获取所有权限分组信息 */
            $per_group_list = Permission_group::all();
            /** 为每个分组封装权限数据 */
            foreach($per_group_list as $key => $group){
                $per_list = Per::where('cat_id',$group->pid)->get();
                $per_group_list[$key]->per_list = $per_list;
            }
            /** 获取该角色所有权限 */
            $own_perlist = RolePermission::where('rid',$rid)->get();
            /** 整理该角色权限id集合 */
            $id_list = array();
            foreach($own_perlist as $per){
                $id_list[] = $per -> pid;
            }
            $own_perlist = $id_list;
            return view('admin.rbac.role.roleEdit',
                compact('own_perlist','per_group_list','role_info'));
        }
        /** 处理表单数据 */
        $role = Role::find($rid);
        $role  -> role_name = $input['role_name'];
        $role  -> sort_order = $input['sort_order'];
        $role  -> save();
        /** 清除该角色所有权限 */
        RolePermission::where('rid',$rid)->delete();
        /** 写入新数据 */
        $row = array(
            'rid'=>$rid
        );
        foreach($_POST['per_data'] as $v){
            $row['pid'] = $v;
            DB::table('role_permission')->insert($row);
        }
        /** 跳转角色列表页 */
        return redirect('manager/rbac/role/role_list');
    }

    /** 展示角色 */
    public function role_list(){
        /** 获取所有角色 */
        $role_list = Role::orderBy('sort_order','asc')->get();
        return view('admin.rbac.role.roleList',compact('role_list'));
    }
}
